perm filename MANHDR.TEX[TEX,DEK] blob sn#706327 filedate 1983-04-18 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	% This file is used for experiments on the new TeX manual format
C00011 00003	% Page layout
C00019 00004	% Chapter formatting
C00023 00005	% The next few lines, if present, should go into PLAIN once they're tested:
C00042 00006	% Macros for drawing figures (leave out of Appendix E)
C00046 00007	% indexing macros
C00049 00008	% internal cross references that may change
C00050 ENDMK
C⊗;
% This file is used for experiments on the new TeX manual format
% Font definitions
\newfam\oldfam
\ifnum\oldfam=8\else\error\fi % 8 is assumed in Greek definitions here
\newfam\calfam
\let\oldtenrm=\tenrm % very temporary substitutions during font development
\font\oldeightsss=cmsss8
\textfont\oldfam=\oldtenrm
\mathchardef\Omega"780A
\mathchardef\Psi"7809
\mathchardef\Phi"7808
\mathchardef\Upsilon"7807
\mathchardef\Sigma"7806
\mathchardef\Pi"7805
\mathchardef\Xi"7804
\mathchardef\Lambda"7803
\mathchardef\Theta"7802
\mathchardef\Delta"7801
\mathchardef\Gamma"7800
\let\oldmapsto=\mapstochar
\def\varepsilon{\hbox{\sixsy E}}
\def\varsigma{\lower1pt\hbox{\fivesy S}}
\def\cal{\fam\calfam}
\font\oldtensy=cmsy10
\font\oldninesy=cmsy9

\font\inchhigh=aminch
\font\titlefont=ambig

\font\ninerm=cmr9
\font\eightrm=cmr8
\font\sixrm=cmr6

\font\ninei=cmi9
\font\eighti=cmi8
\font\sixi=cmi6

\font\ninesy=amsy9
\font\eightsy=amsy8
\font\sixsy=amsy6

\font\eightss=cmss8

\font\eightsss=amsss8 % currently best version, lacks Greek

\font\ninebf=cmb9
\font\eightbf=cmb8
\font\sixbf=cmb6

\font\ninett=cmtt9
\font\eighttt=cmtt8

\font\ninesl=cms9
\font\eightsl=cms8

\font\nineit=cmti9
\font\eightit=cmti8

\font\tenu=cmu10 % unslanted italic
\font\magnifiedfiverm=cmr5 at 10pt
\font\manual=manfnt % font used for the METAFONT logo and special symbols

\font\tenrm=amr10 % temporary substitutions during font development
\font\tentt=amtt
\let\oldtenbf=\tenbf
\font\tenbf=ambx10
\let\mainfont=\tenrm
\textfont0=\tenrm
\let\oldninerm=\ninerm
\font\ninerm=amr9

\def\tenpoint{\def\rm{\fam0\tenrm}%
  \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm
  \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei
  \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
  \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
  \def\it{\fam\itfam\tenit}%
  \textfont\itfam=\tenit
  \def\sl{\fam\slfam\tensl}%
  \textfont\slfam=\tensl
  \def\bf{\fam\bffam\tenbf}%
  \textfont\bffam=\oldtenbf \scriptfont\bffam=\sevenbf
   \scriptscriptfont\bffam=\fivebf
  \def\tt{\fam\ttfam\tentt}%
  \textfont\ttfam=\tentt
\textfont\calfam=\oldtensy % temporary patch for slanted \cal
  \def\normalbaselines{\baselineskip 12pt \lineskip 1pt \lineskiplimit 0pt }%
  \let\sc=\eightrm
  \let\big=\tenbig
% \dispskip 12pt plus 3pt minus 9pt
  \setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width0pt}%
  \normalbaselines\rm}

\def\ninepoint{\def\rm{\fam0\ninerm}%
  \textfont0=\ninerm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
  \textfont1=\ninei \scriptfont1=\sixi \scriptscriptfont1=\fivei
  \textfont2=\ninesy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
  \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
  \def\it{\fam\itfam\nineit}%
  \textfont\itfam=\nineit
  \def\sl{\fam\slfam\ninesl}%
  \textfont\slfam=\ninesl
  \def\bf{\fam\bffam\ninebf}%
  \textfont\bffam=\ninebf \scriptfont\bffam=\sixbf
   \scriptscriptfont\bffam=\fivebf
  \def\tt{\fam\ttfam\ninett}%
  \textfont\ttfam=\ninett
\textfont\calfam=\oldninesy % temporary patch for slanted \cal
  \def\normalbaselines{\baselineskip 11pt \lineskip 1pt \lineskiplimit 0pt }%
  \let\sc=\sevenrm
  \let\big=\ninebig
% \dispskip 11pt plus 3pt minus 8pt
  \setbox\strutbox=\hbox{\vrule height8pt depth3pt width0pt}%
  \normalbaselines\rm}

\def\eightpoint{\def\rm{\fam0\eightrm}%
  \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm
  \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
  \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
  \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex
  \def\it{\fam\itfam\eightit}%
  \textfont\itfam=\eightit
  \def\sl{\fam\slfam\eightsl}%
  \textfont\slfam=\eightsl
  \def\bf{\fam\bffam\eightbf}%
  \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
   \scriptscriptfont\bffam=\fivebf
  \def\tt{\fam\ttfam\eighttt}%
  \textfont\ttfam=\eighttt
  \def\normalbaselines{\baselineskip 9pt \lineskip 1pt \lineskiplimit 0pt }%
  \let\sc=\sevenrm
  \let\big=\eightbig
% \dispskip 9pt plus 2pt minus 6pt
  \setbox\strutbox=\hbox{\vrule height7pt depth2pt width0pt}%
  \normalbaselines\rm}
% Page layout
\hsize 29pc  \vsize 44pc  \maxdepth 2.2pt  \parindent 3pc
\edef\pagewidth{\the\hsize} \edef\pageheight{\the\vsize}
\def\ruleht{.5pt}
\abovedisplayskip 6pt plus 3pt minus 1pt
\belowdisplayskip 6pt plus 3pt minus 1pt
\abovedisplayshortskip 0pt plus 3pt
\belowdisplayshortskip 4pt plus 3pt

%\newinsert\footins
\def\footnote#1#2{{\edef\sf{\the\spacefactor}#1% that's the reference symbol
      \insert\footins{\interlinepenalty100 \let\par=\endgraf
        \splittopskip=10pt plus 1pt minus 1pt \floatingpenalty=20000
        \eightpoint\smallskip\item{#1}\strut#2\strut}%
      \spacefactor=\sf}}
\setskip\footins=12pt plus 2pt minus 4pt % space added when footnote is present
%\setcount\footins=1000 % footnote magnification factor (1 to 1)
\setdimen\footins=30pc % maximum footnotes per page

%\newinsert\trailer
%\setskip\trailer=12pt plus 20pc minus 4pt % white space before closing quotes
%\setcount\trailer=1000
%\setdimen\trailer=\pageheight

\newinsert\margin
\setdimen\margin=10000pt

\newswitch{title}
\titlefalse % \iftitle will be true for pages without heading
\def\titlepage{\global\titletrue}
\def\rhead{} % \rhead contains the running headline
\def\pagenumber{\ifnum\count0<0 \romannumeral-\count0
  \else\number\count0 \fi}

\def\leftheading{\hbox to \pagewidth{%
    \vbox to 10pt{}% strut to position the baseline
    \llap{\tenbf\pagenumber\hskip1pc}% folio to left of text
    \tenit\rhead\hfil% running head flush left
    }}
\def\rightheading{\hbox to \pagewidth{%
    \vbox to 10pt{}% strut to position the baseline
    \hfil\tenit\rhead% running head flush right
    \rlap{\hskip1pc\tenbf\pagenumber}% folio to right of text
    }}

\def\onepageout#1{\shipout\vbox{ % here we define one page of output
    \baselineskip=0pt\lineskip=0pt % butt the boxes together
    \vbox to 3pc{ % this part goes on top of the 44pc pages
      \iftitle % the next is used for title pages
        \global\titlefalse % reset \tpage
        % on title pages we set corner rules for camera alignment
        % because of "sinkage" (put this term in the index)
        \hbox to \pagewidth{\vrule width 1pc height\ruleht \hfil
          \vrule width 1pc}
        \hbox to \pagewidth{\llap{\sevenrm(page \pagenumber)\hskip 1pc}%
          \vrule height1pc width\ruleht depth0pt
          \hfil \vrule width\ruleht depth0pt}
      \else\ifodd\count0 \rightheading\else\leftheading\fi\fi
      \vfill} % this completes the \vbox to 3pc
    \vbox to \pageheight{
      \ifvoid\margin\else % marginal info is present
%       \moveright 31pc\vbox to 0pt{\vskip4pt\box\margin \vss}\fi
        \rlap{\hskip31pc\vbox to 0pt{\vskip4pt\box\margin \vss}}\fi
      #1 % now insert the main information
%     \ifvoid\trailer\else % trailer info is present
%       \ifeven0\vfill % trailer is placed only on odd-numbered pages
%       \else\vskip\skip\trailer \box\trailer\fi\fi
      \ifvoid\footins\else % footnote info is present
        \vskip\skip\footins \vskip-3pt
        \hrule height\ruleht width\pagewidth \vskip-\ruleht \vskip3pt
        \unvbox\footins\fi
      \boxmaxdepth=\the\maxdepth
      } % this completes the \vbox to \pageheight
    }
  \bumppagenumber}

\output{\onepageout{\unvbox255}
% \ifvoid\trailer\else\onepageout{}\fi
  }

\def\indexoutput{} % to be defined in due time
% Chapter formatting
% The preface and table of contents are formatted in place, not here

\newcount\exno % for the number of exercises in the current chapter
\newcount\subsecno % for the number of subsections in the current chapter

\outer\def\beginchapter#1 #2#3. #4\par{\global\setcount\exno=0
  \setcount\subsecno=0
  \def\chapno{#2#3}
  \ifodd\count0
    \errmessage{You had too much text on that last page; I'm backing up}
    \advcount0 by -1 \fi
  \titlepage
  \def\\{ } % \\'s in the title will be treated as spaces
  \message{#1 #2#3:} % show the chapter title on the terminal
  \xdef\rhead{#1 #2#3: #4}
  {\def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.06em X}
    \def\\{#3}
    \ifx\empty\\ \rightline{\inchhigh #2\kern-.04em}
    \else\rightline{\inchhigh #2\kern-.06em#3\kern-.04em}\fi
    \vskip 1.75pc
    \baselineskip 36pt \lineskiplimit 1pt \lineskip 12pt
    \let\\=\cr % now the \\'s are line dividers
    \halign{\hbox to\the\hsize{\titlefont\hfil##}\\#4\unskip\\}
    \vfill\eject} % output the chapter title page
  \tenpoint
  \noindent\ignorespaces} % First paragraph of chapter is not indented

%\outer\def\endchapter{\begingroup\obeylines\gatherquotes}
%\long\def\gatherquotes#1\eject{\vfill
%  \eightpoint
%  \parfillskip 0pt
%  \leftskip\the\parindent plus 40pc
%  \let\rm=\eightss \let\sl=\eightsss
%  \everypar{\sl}
%  \null\insert\trailer{\vbox{#1}}
%  \eject\endgroup}

\outer\def\endchapter{\ifodd\count0 \else\vfill\eject\null\fi
  \begingroup\bigskip\vfill % beginning of the quotes
  \def\eject{\endgroup\eject}
  \def\par{\ifhmode\/\endgraf\fi}\obeylines
  \def\TeX{T\kern-.2em\lower.5ex\hbox{E}\kern-.000em X}
  \eightpoint \let\tt=\ninett
  \baselineskip 10pt
  \parfillskip 0pt
  \interlinepenalty 10000
  \leftskip 0pt plus 40pc minus \the\parindent
  \let\rm=\eightss \let\sl=\eightsss
  \everypar{\sl}}
\def\author#1(#2){\smallskip\noindent\rm--- #1\unskip\enspace(#2)}
% The next few lines, if present, should go into PLAIN once they're tested:
% end of the PLAIN test material

% Composition macros
\def\tenmath{\tenpoint\fam-1 } % use after $ in ninepoint sections
\def\AmSTeX{\strut$\cal A\kern-.1667em\lower.424ex\hbox{$\cal M$}
  \kern-.125em S$-\TeX}
\let\lb={ \let\rb=}
\def\tenbig#1{{\hbox{$\left#1\vbox to8.5pt{}\right.\shutoffspace$}}}
\def\ninebig#1{{\hbox{$\textfont0=\tenrm\textfont2=\tensy
  \left#1\vbox to7.25pt{}\right.\shutoffspace$}}}
\def\eightbig#1{{\hbox{$\textfont0=\ninerm\textfont2=\ninesy
  \left#1\vbox to6.5pt{}\right.\shutoffspace$}}}
\hyphenation{man-u-script man-u-scripts ap-pen-dix}
\newswitch{proofmode}
\proofmodetrue % this should be false when making camera-ready copy
\def\parbreak{\hfil\break\indent}
\def\MF{{\manual META}\-{\manual FONT}}
\def\cstok#1{\thinspace\hbox{\vrule\vtop{\vbox{\hrule\vskip1pt
  \hbox{\vphantom{\tt/}\thinspace{\tt#1}\thinspace}}
  \vskip1pt\hrule}\vrule}\thinspace}

{\catcode`\ =13 \gdef\activespaces{\catcode`\ =13\def {\ }\relax}}

\def\<#1>{\hbox{$\langle$#1$\rangle$}}
\def\oct#1{\hbox{\rm\char'16\kern-.2em\it#1\/\kern.05em}} % octal constant
\def\hex#1{\hbox{\rm\char'26\tt#1}} % hexadecimal constant
\def\pt{\,{\rm pt}} % units of points, in math formulas.
\def\stretch{{\nobreak\hskip0pt plus2pt}} % a little stretchability, in a pinch

% macros for non-centered displays
\newdimen\next
\setdimen\next=\the\hsize
\advdimen\next by \minusthe\parindent
\advdimen\next by \minusthe\parindent
\edef\dbox{\hbox to\the\dimen\next}
\divdimen\next by 58 \varunit=\the\dimen\next % illustrations in Ch.12
\def\display#1${\dbox{$\displaystyle{#1}$\hss}$}
%\def\displaybox#1{\dbox{#1\hss}}
%\def\displayvbox#1{\dbox{\vbox{#1}\hss}}
\def\finishdisplay#1{\hss\rb$$}
%\let\math=$
{\catcode`$=13
% \gdef\display{\catcode`$=13 \def${\rb\math\finishdisplay}%
%   \dbox\lb\math\displaystyle\lb}
  \gdef\displaybox#{\ddefs\lb\catcode`$=3 \let\next}
  \gdef\displayvbox#{\ddefs\vbox\lb\catcode`$=3 \let\next}
  \gdef\ddefs{\catcode`$=13 \let$=\finishdisplay \dbox\lb}
  }
%\def\haligntrick#1{\halign{\span\if01}\fi\relax\ifnum0=`{\fi#1\cr
%    \noalign{\ifnum0=`}\fi}}
\def\beginmathdemo{$$\setskip0=\the\baselineskip \advskip0 by2pt
  \baselineskip=\skip0
  \halign\lb\indent\hbox to 160pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
\def\begindisplaymathdemo {$$\setskip0=\the\baselineskip \advskip0 by15pt
  \baselineskip=\skip0
  \halign\lb\indent\hbox to 160pt{##\hfil}&$\displaystyle{##}$\hfil\cr
  \noalign{\vskip-15pt}}
\def\beginlongmathdemo{$$\setskip0=\the\baselineskip \advskip0 by2pt
  \baselineskip=\skip0
  \halign\lb\indent\hbox to 210pt{##\hfil}&$##$\hfil\cr\noalign{\vskip-2pt}}
\def\beginlongdisplaymathdemo {$$\setskip0=\the\baselineskip \advskip0 by15pt
  \baselineskip=\skip0
  \halign\lb\indent\hbox to 210pt{##\hfil}&$\displaystyle{##}$\hfil\cr
  \noalign{\vskip-15pt}}
\def\endmathdemo{\rb$$}
%{\obeylines\gdef\gobblecr#1
%  {}}

% macros for verbatim scanning
\def\endlist{\endlist}
\def\uncatcode#1{\ifx#1\endlist\let\next=\relax
  \else\catcode`#1=12 \let\next=\uncatcode\fi\next}
\def\ttverbatim{\begingroup
  \expandafter\uncatcode\specials % all catcodes but \| are now 11 or 12
  \parskip 0pt
  \activespaces \obeylines \ttdefs}
{\catcode`\_=13 \catcode`\↑=13 \catcode`\~=13 \catcode`\↓=13
  \gdef\ttdefs{\catcode`\_=13 \chardef_='32
    \catcode`\↑=13 \chardef↑='17
    \catcode`\~=13 \chardef~='24
%   \catcode`\↓=13 \chardef↓='176
%   \ifmath \def↑{{\char'136}}\fi
    \tt}}
%\let\ifmath=\no % when this is \yes, we get up-arrows instead of circumflexes

\def\begintt{$$\let\par=\endgraf \ttverbatim
  \catcode`\|=0 \rightskip-5pc \ttfinish}
{\catcode`\|=0 |catcode`|\=12 % | is temporary escape character
  |obeylines % end of line is active
  |gdef|ttfinish#1↑↑M#2\endtt{|vbox{#2}|endgroup$$}}

\catcode`\|=13
\def\ttglue{.5em plus .25em minus .15em}
{\catcode`\↑↑M=13
  \gdef|{\ttverbatim \spaceskip\ttglue \let↑↑M=\  \let|=\endgroup}}
\def\ttspace{{\tt\hskip\ttglue}}

\def\vrt{\hbox{\tt\char`\|}} % vertical line
\def\dn{\hbox{\tt\char'176}} % downward arrow
\def\up{\hbox{\tt\char'136}} % upward arrow
\def\]{\hbox{\tt\char`\ }} % visible space

\newwrite\ans
\immediate\openout\ans=answers % file for answers to exercises
\def\answer{\par\medbreak
  \immediate\write\ans{}
  \immediate\write\ans{\string\ansno\chapno.\the\count\exno:}
  \copytoblankline}
\def\copytoblankline{\begingroup\setupcopy\copyans}
\def\setupcopy{\expandafter\uncatcode\specials \catcode`\|=12 \obeylines}
\begingroup\obeylines % carriage-returns are active
%\gdef\defendans#1↑↑M#2↑↑M{\gdef\endans{#2}\endgroup} %
\gdef\copyans#1↑↑M{\def\next{#1}%
%  \ifx\next\endans\let\next=\endgroup %
  \ifx\next\empty\let\next=\endgroup %
  \else\immediate\write\ans{\next} \let\next=\copyans\fi\next} %
% the next two lines define \endans as a sentinel for \answer
%\defendans
\endgroup

\def\ansno#1.#2:{\medbreak\noindent
  \hbox to\the\parindent{\bf\hss#1.#2.\enspace}\ignorespaces}
\def\figure#1#2{$$\dbox{\vbox to #1{\ifproofmode\hrule\vfill
      \hsize=2.5in \baselineskip 6pt \fiverm\noindent #2
      \vfill\hrule\fi}\hss}$$}

\outer\def\exercise{\medbreak
  \global\advcount\exno by 1
  \noindent\llap{\manual\char'170\hskip.15em}% triangle in margin
  {\ninebf EXERCISE \bf\chapno.\the\count\exno}\par\nobreak\noindent}
\def\dexercise{\global\advcount\exno by 1
  \llap{\manual\char'170\hskip.15em}% triangle in indented space
  {\eightbf EXERCISE \bf\chapno.\the\count\exno}\hfil\break}
\outer\def\dangerexercise{\danger \dexercise}
\outer\def\ddangerexercise{\ddanger \dexercise}

\newcount\chalcount \setcount\chalcount=0
\outer\def\challenge{\danger\chall}
\outer\def\cchallenge{\ddanger\chall}
\def\chall{\global\advcount\chalcount by1
  \dexercise \hbox{Challenge number \the\count\chalcount:\enskip}\ignorespaces}

\outer\def\danger{\medbreak\begingroup\def\par{\endgraf\endgroup\medbreak}
  \clubpenalty10000\noindent\hang\hangafter-2
  \hbox to 0pt{\hskip\minusthe\hangindent\manual\char127\hfill}\ninepoint}
\outer\def\ddanger{\medbreak\begingroup\def\par{\endgraf\endgroup\medbreak}
  \clubpenalty10000\noindent\hang\hangafter-2
  \hbox to 0pt{\hskip\minusthe\hangindent\manual\char127\kern1pt\char127
    \hfill}\ninepoint}
\def\enddanger{\endgraf\endgroup} % omits the \medbreak

\outer\def\subsection#1. {\medbreak\advcount\subsecno by 1
  \noindent{\it \the\count\subsecno.\enspace#1.\enspace}}

\def\bull{\vrule height .9ex width .8ex depth -.1ex } % square bullet
\def\SS{{\it SS}} % scriptscript style

% Note: I should go through and change "f |\" and "f ↑{*" and "f ↑{:" to f\/
% Macros for drawing figures (leave out of Appendix E)
\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 \kern-#2 }
\def\hidevrule#1#2{\kern-#1{\setdimen0=#1
    \advdimen0 by#2\vrule width1dm0}\kern-#2 }
% \makeblankbox puts rules at the edges of a blank box
% whose dimensions are those of \box0 (assuming nonnegative wd,ht,dp)
% #1 is rule thickness outside, #2 is rule thickness inside
\def\makeblankbox#1#2{\hbox{\lower1dp0\vbox{\hidehrule{#1}{#2}%
    \kern-#1 % overlap the rules at the corners
    \hbox to 1wd0{\hidevrule{#1}{#2}%
      \raise1ht0\vbox to #1{}% set the vrule height
      \lower1dp0\vtop to #1{}% set the vrule depth
      \hfil\hidevrule{#2}{#1}}%
    \kern-#1\hidehrule{#2}{#1}}}}
\def\maketypebox{\makeblankbox{0pt}{1pt}}
\def\makelightbox{\makeblankbox{.2pt}{.2pt}}

% \box\bigdot is a null box with a bullet at its reference point
\newbox\bigdot \newbox\smalldot
\setbox0=\hbox{$\vcenter{}$} % ht0 is the axis height
\setbox1=\hbox to 0pt{$\hss\bullet\hss$} % bullet is centered on the axis
\setbox\bigdot=\vbox to 0pt{\kern-1ht1 \kern1ht0 \box1 \vss}
\setbox1=\hbox to 0pt{$\hss\cdot\hss$} % cdot is centered on the axis
\setbox\smalldot=\vbox to 0pt{\kern-1ht1 \kern1ht0 \box1 \vss}

% \arrows makes things like <--- text --->
\def\arrows#1#2{% #1=width, #2=text
  {\setbox0=\hbox to .611111em{$\hss-\hss$}
    \hbox to #1{\kern-.055556em$\leftarrow$\kern-.3888889em
      \cleaders\copy0\hfil
      \kern.4em #2\kern.4em
      \cleaders\copy0\hfil
      \kern-.3888889em$\rightarrow$\kern-.055556em}}}

% \samplebox makes the outline of a box, with big dot at reference point
\def\samplebox#1#2#3#4{% #1=ht, #2=dp, #3=wd, #4=text
  {\setbox0=\vtop{\vbox to #1{\hbox to #3{}\vss}
      \nointerlineskip
      \vbox to #2{}}% now \box0 has the desired ht, dp, and wd
    \hbox{\copy\bigdot
      \vrule height.2pt depth.2pt width#3
      \kern-#3
      \makelightbox
      \kern-#3
      \raise#1\vbox{\hbox to #3{\hss#4\hss}
        \kern 3pt}}}}

% \sampleglue makes glue between sample boxes
\def\sampleglue#1#2{% #1=width, #2=text
  \vtop{\hbox to #1{\xleaders\hbox to .5vu{\hss\copy\smalldot\hss}\hfil}
    \kern3pt
    \tabskip 0pt plus 1fil
    \halign to #1{\hfil##\cr#2\cr}}}

% indexing macros
\newwrite\inx
\immediate\openout\inx=index % file for index reminders
\let\Z=\relax
\def\leftparen{(}
\def\SP{ }
\def\specialcaret{\ifmmode\def\next{↑}\else\let\next=\xref\fi\next}
\catcode`\↑=13 \let ↑=\specialcaret

\def\xref#1{\def\next{#1}\def\silent{F}%
  \ifx\next\leftparen\let\next=\silentxref
  \else\def\next{\makexref#1\endxref}\fi\next}
\def\silentxref#1){\def\silent{T}\makexref#1\endxref}

\def\makexref#1#2\endxref{\def\text{#2}%
  \if#1.\def\xreftype{1}%
    \def\next{{\tt\spaceskip\ttglue\text}}% case 1, "." means tt text
  \else\if#1:\def\xreftype{2}%
      \def\next{{\tt\char`\\\text}}% case 2, ":" means tt with backslash
    \else\if#1*\def\xreftype{3}%
        \def\next{{\tt\char`\\\text}}% case 3, "*" means a TeX primitive
      \else\if#1<\def\xreftype{4}%
          \def\next{\<\text>}% case 4, "<" means angle bracketed text
        \else\def\xreftype{0}\def\text{#1#2}\let\next=\text\fi\fi\fi\fi
  \ifproofmode\insert\margin{\hbox{\marginstyle\text}}\fi
  {\let\number=\relax
    \edef\text{\write\inx{\Z\text\SP!\xreftype\SP\number\count0.}}%
    \text}%
  \if T\silent\ignorespaces\else\next\fi}
\def\marginstyle{\vrule height 6pt depth 2pt width 0pt \sevenrm}
% internal cross references that may change
\def\sesame{61} % page number for Sesame Street quote
\def\bmiexno{20} % exercise number for bold math italic
\def\punishexno{1} % exercise number for `punishment'

\def\checkequals#1#2 {\ifnum#1=#2\else
  \errmessage{Redefine \string#1 to be \the#2}\fi}